// 生成（） 22
// 就是深度优先遍历先保证left 再处理right 最后符合要求的的放入
// var generateParent = function (n) {
//     let res = [];
//     const help = (cur, left, right) => {
//         if (cur.length == 2 * n) {
//             res.push(cur);
//             return;
//         }
//         if (left < n) {
//             help(cur + "(", left + 1, right);
//         }
//         if (right < left) {
//             help(cur + ")", left, right + 1);
//         }
//     }
//     help("", 0, 0);
//     return res;
// }

// 深度优先遍历
function generateParent(n) {
    let res = [];
    const dfs = (current, left, right) => {
        if (current.length == 2 * n) {
            res.push(current);
            return;
        }
        if (left < n) {
            dfs(current + "(", left + 1, right)
        }
        if (right < left) {
            dfs(current + ")", left, right + 1)
        }

    }
    dfs("", 0, 0);
    return res;
}

console.log(generateParent(3))